// #include <iostream>
// #include <vector>
// using namespace std;
// struct Student
// {
//     std::string name;
//     std::size_t id;
// };
// struct Point
// {
//     int x;
//     int y;
//     Student stu;
// };
// int main()
// {
//     // std::vector<int> mm{1, 2, 3, 4};
//     Point p{1, 2, {"hello", 10}};
//     // int *p = &({1, 2});
//     int *x = new int(1);
//     int &x1 = *x;
//     delete x;
//     // x = nullptr;
//     std::cout << &x1 << " " << x1 << std::endl;
//     return 0;
// }

#include <iostream>
#include <type_traits>

// 普通类型
template <typename T>
void printType(T &&arg)
{
    std::cout << "Type: " << typeid(arg).name() << std::endl;
}

// void showList()
// {
// 	cout << endl;
// }
// template <typename T, typename... Args>
// void showList(T x, Args... args)
// {
//     std::cout << x << " ";
//     showList(args...);
// }

// int main()
// {
//     // int x = 42;

//     // // T&& & 变成 T&
//     // printType(x); // x 是左值，T推导为 int&，所以 arg 是 int&

//     // // T&& && 变成 T&&
//     // printType(42); // 42 是右值，T推导为 int， 所以 arg 是 int&&
//     showList(1, 2, 3);
//     return 0;
// }
#include <iostream>
#include <vector>
#include <chrono>

// int x, y;
// auto globallambda = [](int, int) -> int
// {
//     return x + y;
// };

// class MyClass
// {
// public:
//     MyClass(int a, int b) : x(a), y(b) {}
//     int x, y;
// };

// int main()
// {
//     // const int num_elements = 100000;

//     // // 测试 push_back
//     // auto start = std::chrono::high_resolution_clock::now();
//     // std::vector<MyClass> vec_push_back;
//     // for (int i = 0; i < num_elements; ++i)
//     // {
//     //     vec_push_back.push_back(MyClass(i, i + 1)); // 拷贝或移动构造
//     // }
//     // auto end = std::chrono::high_resolution_clock::now();
//     // std::chrono::duration<double> push_back_duration = end - start;
//     // std::cout << "push_back time: " << push_back_duration.count() << " seconds" << std::endl;

//     // // 测试 emplace_back
//     // start = std::chrono::high_resolution_clock::now();
//     // std::vector<MyClass> vec_emplace_back;
//     // for (int i = 0; i < num_elements; ++i)
//     // {
//     //     vec_emplace_back.emplace_back(i, i + 1); // 原地构造
//     // }
//     // end = std::chrono::high_resolution_clock::now();
//     // std::chrono::duration<double> emplace_back_duration = end - start;
//     // std::cout << "emplace_back time: " << emplace_back_duration.count() << " seconds" << std::endl;
//     printf("%d\n", globallambda(10, 20));
//     return 0;
// }

class Rate
{
public:
    Rate(double rate)
        : _rate(rate)
    {
    }
    double operator()(double money, int year)
    {
        return money * _rate * year;
    }

private:
    double _rate;
};
// ...existing code...
int main()
{
    double rate = 0.49;
    // lambda
    auto r2 = [rate](double money, int year)
    {
        return money * rate * year;
    };
    // 函数对象
    Rate r1(rate);

    // 调用它们以防止被编译器优化掉
    r1(10000, 2);
    r2(10000, 2);

    auto func1 = []
    {
        std::cout << "hello world" << std::endl;
    };
    func1();

    // 这里 r2 重复定义了，需要删除或重命名
    // auto r2 = [rate](double money, int year)
    // {
    //     return money * rate * year;
    // };
    return 0;
}